<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        function cached(fn){
            let obj = Object.create(null)
            return function(str){
                let hit = obj[str]
                return hit || (obj[str] = fn(str))
            }
        }
        //封装一个能实现首字母大写的
        function uper(str){
            str = str.toLowerCase()
            return str.charAt(0).toUpperCase()+str.substring(1)
        }
        const cacheUpper = cached(uper)
        console.log(cacheUpper('ABC'))
    // function cached(fn) {
    //     var cache = Object.create(null)
    //     return function (str) {
    //       var hit = cache[str]
    //       return hit || (cache[str] = fn(str))
    //     }
    //   }

    //   // 封装一个函数：将首字母大写，其他都小写
    //   function UpperStr(str) {
    //     console.log('自己函数执行了')
    //     str = str.toLowerCase()
    //     return str.charAt(0).toUpperCase() + str.substring(1)
    //   }

    //   // 得到一个UpperStr的函数缓存版本
    //   const CacheUpperStr = cached(UpperStr)

    //   console.log(CacheUpperStr('ABC')) // Abc
    </script>
</body>
</html>